import collections
class Solution(object):
    def abbreviateProduct(self, left, right):
        self.zero_count = 0
        min_count = 15
        max_count = 15
        def judge(z):
            while z % 10 == 0:
                z = z // 10
                self.zero_count += 1  
            return z   
        def cal_value(st, z):
            st = st * z
            return st
        last_val = 0
        st = judge(left)
        for val in range(left + 1, right + 1):
            if st <= 10 ** (max_count + min_count):
                st = cal_value(st, val)
                st = judge(st)
            else:
                high_st = int(str(st)[:max_count])
                low_st = st % 10 ** min_count
                low_st = cal_value(low_st, val)
                low_st = judge(low_st) % 10 ** min_count
                high_st = cal_value(high_st, val)
                high_st = int(str(high_st)[:max_count])
                last_val = val
                break
        if last_val:
            for val in range(last_val + 1, right + 1):
                low_st = cal_value(low_st, val)
                low_st = judge(low_st) % 10 ** min_count
                high_st = cal_value(high_st, val)
                high_st = int(str(high_st)[:max_count])
            return ''.join(str(high_st)[:5]) + '...' + ''.join(str(low_st)[-5:]) + 'e' + str(self.zero_count)
        else:
            st = str(st)
            if len(st) <= 10:
                return ''.join(st) + 'e' + str(self.zero_count)
            else:
                return ''.join(st[:5]) + '...' + ''.join(st[-5:]) + 'e' + str(self.zero_count)

            

data = Solution()
left = 9236
right = 9301
print(data.abbreviateProduct(left, right))